Re: [SQL] questions - Mailing list pgsql-sql

From Herouth Maoz
Subject Re: [SQL] questions
Date
Msg-id l03110705b1a2df4f8fb2@[147.233.159.109]
Whole thread Raw
In response to questions  (Lendvary Gyorgy <gyurika@prolan.hu>)
List pgsql-sql
At 15:01 +0300 on 9/6/98, Lendvary Gyorgy wrote:


> sprintf(buff, "CREATE TABLE boci (tup_num int, hapci int)");
> PQexec(conn, buff);
> for (i=0; i<10000; i++)
> {
>     sprintf(buff, "INSERT INTO boci VALUES(i)");
>     PQexec(conn, buff);
> }
>
> for (i=0; i<10000; i++)
> {
>     x = GetValue(); /* GetValue isn't an interesting function */
>     sprintf(buff, "UPDATE boci SET hapci = %d WHERE tup_num = %d", x,
> i);
>     PQexec(conn, buff);
> }
>
> I don't want to update every tuple indvidually but I want to prepare a
> 'block write'. I hope you understand what I'd like to.
> Can you give me a good method for saving a long time? I need a program
> that is about 10 times faster than mine.

Batch inserts can be done faster with COPY rather than insert. I don't see
why you first prepare your table and only then fill it with values. First,
the record number could very well be created with a sequence, but even if
you want to do it programmatically, you should make it much faster (and
more efficient in disk space) if you insert the x directly.

Read the description of how to use COPY in the libpq manual. In general, it
would need to PQexec a COPY command, and then use PQputline inside the loop
and PQendcopy after it. Do all this inside a transaction block, and you'll
get the fastest results for an insert.

If you still need to programmatically update the lines afterwards, it must
be done with UPDATE. There's no help for it. But still, you can use it
inside a transaction block to improve speed. If all you need to do is
replace the values of hapci throughout, you can simply drop all the lines
and use a new COPY.

Herouth

--
Herouth Maoz, Internet developer.
Open University of Israel - Telem project
http://telem.openu.ac.il/~herutma



pgsql-sql by date:

Previous
From: Lendvary Gyorgy
Date:
Subject: questions
Next
From: "Jose' Soares Da Silva"
Date:
Subject: Re: [SQL] querying array